package fr.LesLoutresSauvages.laloutresportive.activities;

import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import fr.LesLoutresSauvages.laloutresportive.R;
import fr.LesLoutresSauvages.laloutresportive.util.Live;
import fr.LesLoutresSauvages.laloutresportive.util.RequetesHttp;

public class RechercherLiveActivity extends Activity implements OnClickListener, OnTouchListener
{
  // ** Declaration des variables pour manipuler les objets graphiques ** //
  private Button rechercherBtChampDeRecherche;
  private EditText rechercherEdtTxtChampDeRecherche;
  private LinearLayout rechercherLayResultats;
  private ArrayList<TextView> arrLiTxtVwResultats;
  private ArrayList<Live> arrLiLiveResultats;
  private RadioGroup rGrpGroupeDeRadioBt;
  private ArrayList<RadioButton> arrLiRBtChoixTypeRecherche;

  // ** Declaration de variables globales ** //
  private final static int RECHERCHE_PAR_SPORT       = 0;
  private final static int RECHERCHE_PAR_DEPARTEMENT = 1;
  private final static int RECHERCHE_PAR_COMPETITION = 2;
  private final static int RECHERCHE_PAR_DATE        = 3;
  private final static int RECHERCHE_PAR_CARTE       = 4;

  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rechercher_live);

    // ** Mapping des variables pour manipuler les objets graphiques ** //
    this.rechercherBtChampDeRecherche = (Button) findViewById(R.id.rechercherBtChampDeRecherche);
    this.rechercherEdtTxtChampDeRecherche = (EditText) findViewById(R.id.rechercherEdtTxtChampDeRecherche);
    this.rechercherLayResultats = (LinearLayout) findViewById(R.id.rechercherLayResultats);

    // ** Instanciation des autres ** //
    this.arrLiTxtVwResultats = new ArrayList<TextView>();
    // TODO : faire un add() particulier pour mettre la fonction setOnTouchListener(this) dedans
    // TODO : idem pour le remove ???
    this.arrLiLiveResultats = new ArrayList<Live>();

    this.rGrpGroupeDeRadioBt = new RadioGroup(this);
    this.arrLiRBtChoixTypeRecherche = new ArrayList<RadioButton>();
    this.arrLiRBtChoixTypeRecherche.add(new RadioButton(this)); // RECHERCHE_PAR_SPORT
//    this.arrLiRBtChoixTypeRecherche.add(new RadioButton(this)); // RECHERCHE_PAR_DEPARTEMENT
//    this.arrLiRBtChoixTypeRecherche.add(new RadioButton(this)); // RECHERCHE_PAR_COMPETITION
//    this.arrLiRBtChoixTypeRecherche.add(new RadioButton(this)); // RECHERCHE_PAR_DATE
//    this.arrLiRBtChoixTypeRecherche.add(new RadioButton(this)); // RECHERCHE_PAR_CARTE
    this.arrLiRBtChoixTypeRecherche.get(RECHERCHE_PAR_SPORT).setText("Par Sport");
//    this.arrLiRBtChoixTypeRecherche.get(RECHERCHE_PAR_DEPARTEMENT).setText("Par Departement");
//    this.arrLiRBtChoixTypeRecherche.get(RECHERCHE_PAR_COMPETITION).setText("Par Competition");
//    this.arrLiRBtChoixTypeRecherche.get(RECHERCHE_PAR_DATE).setText("Par Date");
//    this.arrLiRBtChoixTypeRecherche.get(RECHERCHE_PAR_CARTE).setText("Par Carte");

    // ** Ajout des ecouteurs d'evenements sur les objets graphiques ** //
    this.rechercherBtChampDeRecherche.setOnClickListener(this);

    // ** Ajout de la liste des radio boutons dans l'activity ** //
//    this.rechercherLayResultats.addView(this.rGrpGroupeDeRadioBt);
//    this.rGrpGroupeDeRadioBt.addView(this.arrLiRBtChoixTypeRecherche.get(RECHERCHE_PAR_SPORT));

//    this.arrLiRBtChoixTypeRecherche.get(RECHERCHE_PAR_SPORT).setChecked(true);  // Recherche par sport par defaut
    this.rechercherEdtTxtChampDeRecherche.setEnabled(false);
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu)
  {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_rechercher_live, menu);
    return true;
  }

  @Override
  public void onClick(View v)
  {
    if (v == this.rechercherBtChampDeRecherche)
    {
      // ** cacher les radio boutons pour afficher le reste ** //
      this.rechercherLayResultats.removeAllViews();

      // ** Requete http pour trouver tous les lives ** //
      RequetesHttp rq = new RequetesHttp();
      String listeLivesJson = rq.getListeLives();

      // ** conversion du JSON en arraylist de lives ** //
      this.listeLivesJsonToArrayListTxtVwResultats(listeLivesJson, this.arrLiLiveResultats);

      // ** appliquer le filtre de recherche sur l'ArrayList ** //
      this.filtrerResultats(this.arrLiLiveResultats, this.rechercherEdtTxtChampDeRecherche.getText().toString());

      // ** afficher le resultat dans le layout qui va bien ** //
      for ( int i=0 ; i<this.arrLiLiveResultats.size() ; i++ )
      {
        TextView t = new TextView(this);
        t.setText(this.arrLiLiveResultats.get(i).getNom() + " (" + this.arrLiLiveResultats.get(i).getSport().getNom() + ")");
        t.setHeight(50);  // Taille de 50 pixels
        t.setGravity(0x10); // Gravity : center_vertical
        t.setOnClickListener(this);
        this.arrLiTxtVwResultats.add(t);
        this.rechercherLayResultats.addView(this.arrLiTxtVwResultats.get(i));
      }
      return;
    }
    
    for ( int i=0 ; i<this.arrLiTxtVwResultats.size() ; i++ )
    {
      if ( v == this.arrLiTxtVwResultats.get(i) )
      {
//        Toast.makeText(this, this.arrLiTxtVwResultats.get(i).getText(), Toast.LENGTH_SHORT).show();
        Live liveTrouve = new Live();
        int index = 0;
        
        for ( int j=0 ; j<this.arrLiLiveResultats.size() ; j++ )
        {
          String strValRecherchee = this.arrLiTxtVwResultats.get(i).getText().toString();
          String strValExaminee = this.arrLiLiveResultats.get(j).getNom() + " (" + this.arrLiLiveResultats.get(j).getSport().getNom() + ")";
          if ( strValRecherchee.equals( strValExaminee ) )
          {
            index = j;
            liveTrouve = this.arrLiLiveResultats.get(index);
            break;
          }
        }

        // ** changer d'activity avec le live en parametre global ** //
        Intent intent = new Intent(RechercherLiveActivity.this, SuivreLiveActivity.class);
        intent.putExtra("Type", "LiveRecherche");
        SuivreLiveActivity.gLiveASuivre = liveTrouve;
        startActivity(intent);

        return;
      }
    }

  }

  private void filtrerResultats(ArrayList<Live> al, String filtre)
  {
    // TODO : a implementer
    
    //this.arrLiTxtVwResultats;
    //this.arrLiTxtVwResultats.add(this.customNewTextView(this, this.rechercherBtChampDeRecherche.getText()));
    //this.rechercherBtChampDeRecherche.getText();
    //en fonction du radio bouton qui est checked

    RadioButton v = (RadioButton) this.rGrpGroupeDeRadioBt.getChildAt(this.rGrpGroupeDeRadioBt.getCheckedRadioButtonId());
    if ( v == this.rGrpGroupeDeRadioBt.getChildAt(RECHERCHE_PAR_SPORT) )
    {
    }
    if ( v == this.rGrpGroupeDeRadioBt.getChildAt(RECHERCHE_PAR_DEPARTEMENT) )
    {
    }
    if ( v == this.rGrpGroupeDeRadioBt.getChildAt(RECHERCHE_PAR_COMPETITION) )
    {
    }
    if ( v == this.rGrpGroupeDeRadioBt.getChildAt(RECHERCHE_PAR_DATE) )
    {
    }
    if ( v == this.rGrpGroupeDeRadioBt.getChildAt(RECHERCHE_PAR_CARTE) )
    {
    }
  }

//  private TextView customNewTextView(Context context, CharSequence texteDuTxtView)
//  {
//    TextView t = new TextView(context);
//    t.setOnTouchListener(this);
//    t.setText(texteDuTxtView);
//    return ( t );
//  }

  private void listeLivesJsonToArrayListTxtVwResultats(String lst, ArrayList<Live> al)
  {
    try
    {
      JSONArray jArr = new JSONArray(lst);

      for ( int i=0; i<jArr.length(); i++)
      {
        JSONObject jObjLive = jArr.getJSONObject(i);
        Live live = new Live();
        live.fromJSON(jObjLive.toString());

        al.add(live);
      }
    }
    catch (JSONException e)
    {
      e.printStackTrace();
    }
  }

  @Override
  public boolean onTouch(View v, MotionEvent event)
  {
/*
 */

    return false;
  }

}
